package graph;

import list.Queue;

/**
 * description:
 * author:张腾
 * date:2021-04-11
 */

/**
 * 无向图
 */
public class Graph {

    //顶点数目
    private final int V;

    //边的数目
    private int E;

    //邻接表  是一个数组 数组元素是队列
    private Queue<Integer>[] adj;

    public Graph(int v) {
        this.V = v;
        this.E = 0;
        this.adj = new Queue[V];
        for (int i = 0; i < adj.length; i++) {
            adj[i] = new Queue<Integer>();
        }
    }

    public int V(){
        return V;
    }

    public int E(){
        return E;
    }

    //给图中加一条边 连接顶点v和w
    public void addEdge(int v,int w){

        //无向图 让两个顶点的邻接表都增加
        adj[v].enqueue(w);
        adj[w].enqueue(v);

        E++;
    }

    //获取和顶点v相连的所有顶点
    public Queue<Integer> adj(int v){

        return adj[v];
    }
}
